#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/w1-gpio.h> // 这里面只有一个结构体定义。
#include <linux/platform_device.h> // 本质上，这个属于platform设备。
 
#define DS18B20_GPIO			21  // 设备接在GPIO21上，手动外接上拉电阻
 
static void w1_enable_external_pullup(int enable)
{
    // 这里是设置IO上拉电阻的，我不知道怎么设置MIPS的GPIO，所以就没写，只会影响机器休眠的时的电流大小，不影响功能。
}
 
static struct w1_gpio_platform_data ds18b20_w1_gpio = {
	.pin = DS18B20_GPIO,
	.is_open_drain = 0,
	.enable_external_pullup = w1_enable_external_pullup,
};
 
static struct platform_device ds18b20_device = {
	.name    = "w1-gpio",
	.id      = -1,
	.dev     = {
		.platform_data = &ds18b20_w1_gpio,
	},
};
 
static int __init ds18b20_init(void)
{  
	platform_device_register(&ds18b20_device);
 
	return 0;  
}
 
static void __exit ds18b20_exit(void)
{
	platform_device_unregister(&ds18b20_device);
}
 
module_init(ds18b20_init);
module_exit(ds18b20_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Yuyaowen");